import router from './routes';

import store from './store';

import {Message} from 'element-ui';
import {getRouterId, getToken} from "@/utils/storage";

const whiteList = ['/login', '/auth'];


router.beforeEach(async (to, from, next) => {
  // 加载动画的进度
  // 显示标题栏文字
  document.title = to.meta.title;

  const hasToken = getToken();

  // 判断 token 存本地了
  if (hasToken) {
    // 判断 路径 /login 重定向到 /
    if (to.path.startsWith('/login')) {
      next({path: '/'});
      // 进度动画 消失
    } else {
      // 从仓库中获取角色
      const hasRouterId = getRouterId();//store.getters.router_id;
      if (hasRouterId) {//仓库中有没有存储角色
        next();
      } else {
        // 如果出错 // 重定向到 login
        try {
          await store.dispatch('users/getInfo');// 在仓库中已经有了角色
          // 处理左侧导航
          const accessRoutes = await store.dispatch('permission/generatorRoutes');//生成导航
          // 动态加载导航
          router.addRoutes(accessRoutes);//动态
          next({...to, replace: true});// 替换
        } catch (e) {
          console.log(e);
          // 重定向到 login  想要跳转的路径 传递到 login
          await store.dispatch('users/resetToken');
          next(`/login?redirect=${to.path}`)
          // 进度动画 消失
        }
      }
    }
  }
  else {
    // 效验白名单 有 next 没有: /login
    if (whiteList.indexOf(to.path) !== -1) {
      next();
    } else {
      next(`login?redirect=${to.path}`)
      // 进度动画 消失
    }
  }
});
